;	PDP-11 FLOATIN POINT PACKAGE
;	UNSIGNED INTEGER MULTIPLY
;	UNSIGNED INTEGER DIVIDE
;
;	MODULES INCLUDED:
;	1. M.DPIM
;	2. M.DPID
;
;
;
;
R0	=	%0
R1	=	%1
R2	=	%2
R3	=	%3
R4	=	%4
R5	=	%5
SP	=	%6
PC	=	%7
;	SUBROUTINE TO MULTIPLY TWO DOUBLE PRECIOSION INTEGERS
;	USES ALL REGISTERS (R0-R5)
;
;	ENTER EITH JSR  PC,M.DPIM
;		MULTIPLIER IN R2-R3
;		MULTIPLICAND IN R4-R5
;		RESULT RETURNED IN R0-R1-R2-R3
;
M.DPIM:	CLR	R0		;CLEAR HIGH ORDER WORDS
	CLR	R1
	MOV	#41,-(SP)	;MOVE 32 DEC TO COUNTER
M.DP01:	ROR	R0
	ROR	R1
	ROR	R2		;SHIFT TO ADD
	ROR	R3
	BCC	M.DP02		;NO CARRY NO ADD
	ADD	R5,R1
	ADC	R0		;ADD DOUBLE PRECISION TO OBTAIN NEW PARTIAL 
	ADD	R4,R0		;PRODUCT
M.DP02:	DEC	@SP		;DECREMENT COUNTER
	BNE	M.DP01
	TST	(SP)+		;REMOVE THE COUNTER
	RTS	PC		;RETURN TO THE CALLER

;	DIVISION UTILITY SUBROUTINE
;	R0-R1-R2-R2=DIVIDEND
;	R4-R5=DIVISOR
;	R0-R1=REMAINDER AFTER DIVISION
;	R2-R3=QUOTIENT AFTER DIVISION
;	ENTER WITH JSR	PC,M.DPID
;
M.DPID:	MOV	#40,-(SP)	;COUNTER FOR DIVISION CYCLES
	MOV	R4,-(SP)	;HIGH ORDER
	MOV	R5,-(SP)	;LOW ORDER DIVISOR TO THE STACK
	NEG	2(SP)		;FORM NEGATIVE
	NEG	@SP		;VERSION OF THE DIVISOR
	SBC	2(SP)
	ADD	@SP,R1
	ADC	R0		;PERFORM THE INITIAL SUBTRACTION
	ADD	2(SP),R0
	BCS	M.DP50		;IF CARRY THEN OVERFLOW HAS OCCURRED
	CLR	-(SP)		;THIS IS A LONGER LASTING CARRY BIT
M.DP40:	ROL	R3
	ROL	R2
	ROL	R1
	ROL	R0
	TST	@SP		;TEST "CARRY" INDICATOR
	BEQ	M.DP41		;IF NO "CARRY" THEN ADD ELSE SUBTRACT
	CLR	@SP		;CLEAR UP FOR NEXT TIME
	ADD	2(SP),R1
	ADC	R0		;ADD -(DIVISOR)
	ADC	@SP		;SET "CARRY" BIT
	ADD	4(SP),R0;<-
	BR	M.DP42
M.DP41:	ADD	R5,R1
	ADC	R0		;ADD +(DIVISOR)
	ADC	@SP		;SET "CARRY" BIT
	ADD	R4,R0	;<-
M.DP42:	ADC	@SP		;SET "CARRY" BIT
M.DP43:	TST	@SP		;TEST THE UPDATE INDICATOR
	BEQ	.+4	;->	;IF ZERO FORGET IT
	INC	R3	;  I	;NO CARRY POSSIBLE HERE
	DEC	6(SP)	;<-	;DECREMENT COUNTER
	BGT	M.DP40		;BRANCH IF MORE TO DO
	ROR	R3
	BCS	M.DP44
	ADD	R5,R1
	ADC	R0
	ADD	R4,R0
	CLC
M.DP44:	ROL	R3
	ADD	#10,SP		;ADJUST STACK BY 5 WORDS
	CLV			;CLEAR OVERFLOW ON THE LARGE MACHINES
	RTS	PC
M.DP50:	ADD	#6,SP
	SEV			;SET OVERFLOW BIT FOR THE USER
	RTS	PC
	.EOT
                                                                                                                                                                                                                                                                                                                                                                                            